package com.virtual.repository;

import java.util.Date;
import java.util.LinkedList;

import com.virtual.repository.common.criteria.CriteriaBuilder;
import com.virtual.repository.common.managers.RepositoryManager;
import com.virtual.repository.common.operators.CriteriaOperator;
import com.virtual.repository.common.operators.LogicalOperator;
import com.virtual.repository.common.queries.Query;
import com.virtual.repository.common.queries.QueryBuilder;


public class Main {

	
	//TU JEST KONCEPT TEGO CO ROBIMY
	
	/*Query query = new Query();
	
	query.from(Customer.class);
	Customer c = query.select("imie", "credits"); //jak null to caly obiekt
	query.where(new WhereBuilder());
	
	
	QueryManager b = new QueryManager(query);
	b.createQuery(query);
	Customer c = b.queryForObject();
	List<Customer> c = b.queryForList();	
	
	//do zrobienia
	new WhereBuilder()*/

	
	
	// KLUDGE: Przykadowe zastosowanie, do p�niejszego usuniecia.
	public static void main(String[] args) {
		// TWORZENIE QUERY BUILDER'A DLA DANEJ KLASY/TABLEKI.
		QueryBuilder qb = new QueryBuilder(String.class);
		
		// DODAWANIE POBIERANYCH ZMIENNYCH PO NAZWIE.
		qb.addProperty("value");
		//qb.addProperty("secondProperty");
		// DODAWANIE NAZWY ENCJI JAKA FIGURUJE W BAZIE
		// POWINIEN TO DODAWAĆ TYLKO QUERYMANAGER
		//TWORZENIE KRYTERI�W WYBORU
		CriteriaBuilder cb = new CriteriaBuilder();
		
		//DODANIE PRZYKLADOWEGO KRYTERIUM.
		cb.addCriterion("value", CriteriaOperator.GRATER, 10);
		
		//DODAWANIE KRYTERIUM Z LISTA.
		//cb.addCriterion(LogicalOperator.AND, "value", CriteriaOperator.NOT_IN, new LinkedList<String>());
		
		//DODAWANIE KRYTERIUM Z OBIEKTEM.
		//cb.addCriterion(LogicalOperator.OR, "value", CriteriaOperator.EQUALS, new Date());
		
		//BUDOWANIE KRYTERIUM.
		try {
			qb.addCriteria(cb.build());
		} catch (CloneNotSupportedException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		
		//DODAWANIE REGU SORTOWANIA.
		qb.addOrderByRule("value", true);
		//qb.addOrderByRule("secondProperty", false);
		
		//USTAWIANIE LIMITU NA ILOSC WYNIK�W.
		qb.setLimit(10);
		
		//WYPISANIE W PARA-SQL'OWEJ FORMIE �EBY LATWO BYLO SPRAWDZAC.
		Query query = qb.build(); 
		System.out.println(query.toString());
		
		
		
		//READ THE CONFIGURATION AND INITIALIZE THE REPOSITORY MANAGER
		RepositoryManager manager = new RepositoryManager();
		
		//ENTER INTO DIRECTORY: src/main/resources/model-config
		//COPY the file: model-config-datasources.sample.xml AND REMOVE THE ".sample" PREFIX
		//ADJUST YOUR CONNECTION PARAMETERS TO THE DATASOURCES
		
		//manager.initialize("src/main/resources/model-config/model-config.xml");
		System.out.println(manager.getModelConfig());

		manager.release();
	}
}
